Computer systems are used extensively to implement many applications, such as word processing, data management, simulations, games, and other tasks. A computer system typically displays a visual environment to a user on a display screen or other visual output device. Users can interact with the displayed environment to perform functions on the computer, play a game, experience a simulated environment, use a computer aided design (CAD) system, etc. One visual environment that is particularly common is a graphical user interface (GUI). GUI's present visual images which describe various graphical metaphors of a program or operating system implemented on the computer. Common operating systems using GUI's include the Windows™ operating system from Microsoft Corporation and the MacOS operating system from Apple Computer, Inc. The user typically moves a displayed, user-controlled graphical object, such as a cursor or pointer, across a computer screen and onto other displayed graphical objects or predefined screen regions, and then inputs a command to execute a given selection or operation. The objects or regions (“targets”) can include, for example, icons, windows, pull-down menus, buttons, and scroll bars. Most GUI's are currently 2-dimensional as displayed on a computer screen; however, three dimensional (3-D) GUI's that present simulated 3-D environments on a 2-D screen can also be provided. Other programs or environments that may provide user-controlled graphical objects such as a cursor or a “view” controlled by the user include graphical “web pages” or other environments offered on the World Wide Web of the Internet, CAD programs, video games, virtual reality simulations, etc.
The user interaction with and manipulation of the computer environment is achieved using any of a variety of types of human-computer interface devices that are connected to the computer system controlling the displayed environment. In most systems, the computer updates the environment in response to the user's manipulation of a user-manipulatable physical object (“user object”) that is included in the interface device, such as a mouse, joystick, etc. The computer provides feedback to the user utilizing the display screen. A computer mouse is a common user object used to interact with a GUI or other graphical environment. A mouse (and other mouse-type devices such as a track ball) is typically used as a position control device in which displacement of the mouse in a planar workspace (e.g. on a mouse pad) is directly correlated to displacement of the user-controlled graphical object, such as a cursor, displayed on the screen.
Force feedback interface devices allow a user to experience forces on the manipulated user object based on interactions and events within the displayed graphical environment. Typically, computer-controlled actuators are used to output forces on the user object in provided degrees of freedom to simulate various sensations, such as an obstruction force when moving the cursor into a wall, a damping force to resist motion of the cursor, and a spring force to bias the cursor to move back toward a starting position of the spring. Force feedback devices can be implemented in many forms, such as a joystick, mouse, steering wheel, etc.
When implementing force feedback sensations in a GUI of an operating system, several problems can arise. One problem is the use of force feedback when multiple application programs are simultaneously running in a multi-tasking environment on the host computer. Most operating systems allow such multi-tasking, for example, to allow a user to interact with one application while one or more applications are also running, receiving data, outputting data, or performing other tasks. For example, in the Windows™ operating system, one application is the “active” application that typically displays an active window in the GUI. The user can manipulate the functions of the active application using the cursor. Other inactive applications are also running and may have inactive windows displayed in the GUI. The user can switch to a different application by clicking the cursor in an inactive window, for example, which causes the new application to be the active application and the formerly active application to become inactive.
Each application run by an operating system may have its own set of force sensations that it needs to command to the force feedback device. Thus, one application may need to command spring, force, vibration, and texture force sensations, while a different application may need to command spring, damper, and jolt force sensations. The force feedback device typically cannot store all possible force sensations for each application running in the operating system, so there is a problem of which force sensations the force feedback device should store and implement at any one time. In addition, if two of the multi-tasking applications command conflicting force sensations, the force feedback device needs to choose one of the force sensations to output, and there currently is no system or method of doing so.
A different problem occurs when using a force feedback device with a GUI. Traditional mouse controllers used with GUI's are relative position reporting devices, i.e., they report only changes in position of the mouse to the host computer, which the host computer uses to calculate a new position for the cursor on the screen. Many force feedback devices, in contrast, are typically absolute position reporting devices which report an absolute position of the cursor, such as screen coordinates, to the host computer. This is because the force feedback device needs to know the cursor position to accurately determine when forces are to be applied and to accurately calculate the forces. However, it would be desirable in some instances to have a relative position reporting force feedback device, since the host computer is standardized to receive and interpret relative positions at the most basic level. Furthermore, such a relative device would permit the host computer to perform needed adjustments to cursor position, such as ballistics calculations which modify cursor position based on mouse velocity to provide enhanced control. If the host computer performs such adjustments, the force feedback device processors are relieved of computational burden. In addition, some types of interface devices such as trackballs are better suited to relative position reporting since an absolute, limited workspace is not easily defined for these devices.
Another problem occurs when force feedback is implemented with a GUI or other graphical environment and the graphical environment changes resolution or aspect ratio. For example, if a resolution of 640×480 is being displayed by the host computer on a screen, the force feedback device assumes that graphical objects in the GUI have a size proportional to screen dimensions and outputs forces accordingly. However, when the resolution is changed, the objects displayed on the screen change size in proportion to the screen dimensions. The force feedback device continues to check for conditions and generate forces as if the old resolution were active, resulting in forces that do not correlate with displayed interactions on the screen. The aspect ratio of a display screen can also change, e.g., when two screens are used to provide double the amount of displayed area in the GUI, the aspect ratio doubles in one dimension. Using prior art force feedback devices, forces can become distorted from such an aspect ratio change. For example, a circle object displayed on the screen may have forces at its borders that feel like an ellipse to the user of the interface device, since the aspect ratios of the screen and the mouse workspace are different.